	/**
	 * コンストラクタ
	 */
	setSortData.prototype.Cell_Constructor=null;
	function setSortData(){
		setSortData.prototype.Cell_Constructor={
			"Action_Script":null,							//ソート情報処理後に実行したい式（evalで処理するのでセミコロン込みで記述）
			"Sql_TagIdName":"OrderBySql",			//order句を格納するhtmlタグID名称（なければorderBySql)
			"Head_AddString":""							//▼▲を表示させるタグのID名の頭に付与する文字列（カラム名をそのままタグとして利用できない場合に使用）
		};
	}
	
	/**
	 * 初期設定
	 */
	setSortData.prototype.setOption=function(option_array){
		if(option_array['Action_Script']!=null){
			setSortData.prototype.Cell_Constructor.Action_Script=option_array['Action_Script'];
		}
		if(option_array['Sql_TagIdName']!=null){
			setSortData.prototype.Cell_Constructor.Sql_TagIdName=option_array['Sql_TagIdName'];
		}
		if(option_array['Head_AddString']!=null){
			setSortData.prototype.Cell_Constructor.Head_AddString=option_array['Head_AddString'];
		}
		var orderBySql = document.getElementById(setSortData.prototype.Cell_Constructor.Sql_TagIdName);

		if ( orderBySql == null ){
			alert("id="+setSortData.prototype.Cell_Constructor.Sql_TagIdName+"のhiddenが存在してません。");
			return;
		}
		if(orderBySql.value != ""){
			var orderByType ="";											//昇順 or 降順
			var splitOrderData = orderBySql.value.split(",");				//order句を格納
			for(var i=0;i<splitOrderData.length;i++){
				var ElementId = splitOrderData[i];							//order句を分解しカラム名（タグidとして利用する)を取得する変数
				
				if(ElementId.match(/\./)){
					var splitComma = ElementId.split(".");					//ドットがついているorder句を分割した配列情報一時格納用
					ElementId = splitComma[1];								//テーブル名とドットがない「分割したorder句」を取得
				}
				if(ElementId.match(/ DESC/i)){
					orderByType = "▼";
					ElementId = ElementId.substring(0,ElementId.length-5);
				}else if(ElementId.match(/ ASC/i)){
					orderByType = "▲";
					ElementId = ElementId.substring(0,ElementId.length-4);
				}
				var orderField = document.getElementById(setSortData.prototype.Cell_Constructor.Head_AddString+ElementId);
				if ( orderField == null ){
					alert("id="+setSortData.prototype.Cell_Constructor.Head_AddString+ElementId+"のhiddenが存在してません。");
					continue;
				}
				orderField.innerHTML = '<span id="'+ setSortData.prototype.Cell_Constructor.Head_AddString+ElementId +'">'+ (i+1) + orderByType +'</span>';
			}
		}
	}
	
	/****************************************
	*	並び替え実行関数
	*	fieldはソートしたいカラム名
	*	defaultSortTypeは初回時のソート方法を記述「ASC」or「DESC」 を選択
	*****************************************/
	setSortData.prototype.sortEvent = function(field,defaultSortType) {
		var orderBySql = document.getElementById(setSortData.prototype.Cell_Constructor.Sql_TagIdName);	//id=OrderBySqlエレメント取得
		
		var ElementId = field;
		
		//ドットがカラム名に存在しているか（カラム名にテーブル名が存在しているか）
		if(field.match(/\./)){
			var splitComma = field.split(".");			//「分割したorder句」をドットで分割
			ElementId = splitComma[1];						//テーブル名とドットがない「分割したorder句」を取得
		}
		var orderField = document.getElementById(setSortData.prototype.Cell_Constructor.Head_AddString+ElementId);		//spanタグエレメント取得(idは引数１にて取得)

		//id=OrderBySqlエレメントが未取得である
		if ( orderBySql == null ){
			alert("id="+setSortData.prototype.Cell_Constructor.Sql_TagIdName+"のhiddenが存在してません。");
			return;
		}
		//spanエレメントが未取得である
		if ( orderField == null ){
			alert("id="+setSortData.prototype.Cell_Constructor.Head_AddString+ElementId+"のエレメントが存在してません。");
			return;
		}
		if(setSortData.prototype.Cell_Constructor.Action_Script==null){
			alert("ソート情報処理後に実行したい式（evalで処理するのでセミコロン込みで記述）を初期設定して下さい。");
			return;
		}
		var sqlData = orderBySql.value;							//id=OrderBySqlのvalue値を取得
		var createSqlArray = new Array();						//OrderBy句に追加するカラム名を格納する配列変数
		
		var fieldExistenceFlg = false;							//「ソート選択したカラム名」がid=OrderBySqlのvalue値に存在しているならtrue
		
		
		//id=OrderBySqlのvalue値がカラではない
		if(sqlData != ""){
			var splitOrderData = sqlData.split(",");			//id=OrderBySqlのvalue値のカンマで区切った情報を分割して格納

			var re = new RegExp("^"+ElementId+" ");					//「ソート選択したカラム名」から始まり、半角空白が１つ後ろについているかの正規表現式
			
			
			//id=OrderBySqlのvalue値のカンマで区切った情報の分割数繰り返し（カラム数）
			for(var i=0;i<splitOrderData.length;i++){
				
				var orderOne = splitOrderData[i];					//「分割したorder句」を１句ずつ格納
				
				//ドットがカラム名に存在しているか（カラム名にテーブル名が存在しているか）
				if(orderOne.match(/\./)){
					var splitComma = orderOne.split(".");			//「分割したorder句」をドットで分割
					orderOne = splitComma[1];						//テーブル名とドットがない「分割したorder句」を取得
				}
				
				//「分割したorder句」内容に「ソート選択したカラム名」が存在するか
				if(orderOne.match(re)){
					//「分割したorder句」内容に「 ASC」が存在するか
					if(orderOne.match(/ ASC/i)){
						//ソートのデフォルト値が DESCではない場合、追加処理を行う
						if(defaultSortType.match(/DESC/i)==null){
							createSqlArray.push(splitOrderData[i].substring(0,splitOrderData[i].length-4)+" DESC");	//「ソート選択したカラム名」をDESCにして配列に追加
						}
					}else if(orderOne.match(/ DESC/i)){
						//ソートのデフォルト値が DESCの場合、ASCにして格納する
						if(defaultSortType.match(/DESC/i)){
							createSqlArray.push(splitOrderData[i].substring(0,splitOrderData[i].length-5)+" ASC");	//「ソート選択したカラム名」をDESCにして配列に追加
						}
					}
					fieldExistenceFlg = true;						//「分割したorder句」に「ソート選択したカラム名」が存在していたのでtrue
				}else{
					createSqlArray.push(splitOrderData[i]);			//「分割したorder句」をOrderBy句に追加するため配列に格納
				}
			}
		}
		//「分割したorder句」として「ソート選択したカラム名」が存在していないか
		if(fieldExistenceFlg==false){
			//ソートのデフォルト設定している最初の並び替えとして引数３に値が格納されているか
			if(defaultSortType!=""){
				//ソートのデフォルト値の内容に「DESC」または「desc」が存在している
				if(defaultSortType.match(/DESC/i)){
					createSqlArray.push(field + " DESC");	//「DESC」または「desc」が存在しているので「 DESC」を付与して「OrderBy句に追加するカラム名を格納する配列変数」に追加
				}else{
					createSqlArray.push(field + " ASC");	//「DESC」または「desc」が存在していないなら「 ASC」を付与して「OrderBy句に追加するカラム名を格納する配列変数」に追加
				}
			}else{
				
				createSqlArray.push(field + " ASC");		//初期ソートとして「ASC」を付与して「OrderBy句に追加するカラム名を格納する配列変数」に追加
			}
		}
		orderBySql.value = createSqlArray.join(",");					//OrderBy句に追加するカラム名を格納する配列変数に対してカンマ区切りの文字列に変換し、「id=OrderBySqlのvalue値」に上書する

		try{
			//式実行
			eval(setSortData.prototype.Cell_Constructor.Action_Script);
		}catch(ex){
			alert("eval式実行時にエラーが発生しました。正しく式を記述しているか確認して下さい。");
		}

	}